package com.smart.community.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.user.entity.UserRole;
import java.util.List;

/**
 * 用户角色服务接口
 *
 * @author Wu.Liang
 * @since 2025-07-05
 */
public interface UserRoleService extends IService<UserRole> {

    /**
     * 根据用户ID获取用户角色列表
     *
     * @param userId 用户ID
     * @return 用户角色列表
     * @throws Exception 统一异常
     */
    List<UserRole> getUserRolesByUserId(Long userId) throws Exception;

    /**
     * 为用户分配角色
     *
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @throws Exception 统一异常
     */
    void assignRolesToUser(Long userId, List<Long> roleIds) throws Exception;

    /**
     * 移除用户角色
     *
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @throws Exception 统一异常
     */
    void removeRolesFromUser(Long userId, List<Long> roleIds) throws Exception;

    /**
     * 移除用户所有角色（物理删除）
     *
     * @param userId 用户ID
     * @throws Exception 统一异常
     */
    void removeAllRolesFromUser(Long userId) throws Exception;

    /**
     * 根据角色ID获取用户列表
     *
     * @param roleId 角色ID
     * @return 用户列表
     * @throws Exception 统一异常
     */
    List<com.smart.community.user.entity.User> getUsersByRoleId(Long roleId) throws Exception;

    /**
     * 检查用户是否已经拥有指定角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 是否拥有该角色
     * @throws Exception 统一异常
     */
    boolean userHasRole(Long userId, Long roleId) throws Exception;
} 